el-button<template>
  <div class="app-container">
    <el-card class="box-card" >
      <div slot="header" class="clearfix">
        <span class="el-icon-document">已发任务</span>
        <!-- <el-button style="float: right;" size="small" type="danger" @click="goBack">关闭</el-button> -->
      </div>
      <el-tabs  tab-position="top" v-model="activeName" @tab-click="handleClick">
        <!--表单信息-->
        <el-tab-pane label="表单信息" name="1">
          <el-col :span="16" :offset="4">
            <!-- <v-form-render ref="vFormRef"/> -->
            <ProcessInstanceTimeline :activity-nodes="activityNodes" />
         </el-col>
        </el-tab-pane>
        <!--流程流转记录-->
        <el-tab-pane label="流转记录" name="2">

      <el-table :data="taskList" border header-cell-class-name="table-header-gray">
    <el-table-column label="审批节点" prop="name" min-width="120" align="center" />
    <el-table-column label="审批人" min-width="100" align="center">
      <template #default="scope">
        {{ scope.row.assigneeUser?.userName || scope.row.ownerUser?.userName }}
      </template>
    </el-table-column>
    <el-table-column
      :formatter="dateFormatter"
      align="center"
      label="开始时间"
      prop="createTime"
      min-width="140"
    />
    <el-table-column
      :formatter="dateFormatter"
      align="center"
      label="结束时间"
      prop="endTime"
      min-width="140"
    />
    <el-table-column align="center" label="审批状态" prop="status" min-width="90">
      <template #default="scope">
        <dict-tag :options="bpm_task_status" :value="scope.row.status" />
      </template>
    </el-table-column>
    <el-table-column align="center" label="审批建议" prop="reason" min-width="200">
      <template #default="scope">
        {{ scope.row.reason }}
        <el-button
          class="ml-10px"
          size="small"
          v-if="scope.row.formId > 0"
          @click="handleFormDetail(scope.row)"
        >
          查看表单
        </el-button>
      </template>
    </el-table-column>
    <el-table-column align="center" label="耗时" prop="durationInMillis" min-width="100">
      <template #default="scope">
        {{ formatPast2(scope.row.durationInMillis) }}
      </template>
    </el-table-column>
  </el-table>
          <el-col :span="16" :offset="4" style="display:none" >
            <div class="block">
              <el-timeline>
                <el-timeline-item
                  v-for="(item,index ) in flowRecordList"
                  :key="index"
                  :icon="setIcon(item.finishTime)"
                  :color="setColor(item.finishTime)"
                >
                  <p style="font-weight: 700">{{item.taskName}}</p>
                  <el-card :body-style="{ padding: '10px' }">
                    <el-descriptions class="margin-top" :column="1" size="small" border>
                      <el-descriptions-item v-if="item.assigneeName" label-class-name="my-label">
                        <template slot="label"><i class="el-icon-user"></i>办理人</template>
                        {{item.assigneeName}}
                        <el-tag type="info" size="small">{{item.deptName}}</el-tag>
                      </el-descriptions-item>
                      <el-descriptions-item v-if="item.candidate" label-class-name="my-label">
                        <template slot="label"><i class="el-icon-user"></i>候选办理</template>
                        {{item.candidate}}
                      </el-descriptions-item>
                      <el-descriptions-item label-class-name="my-label">
                        <template slot="label"><i class="el-icon-date"></i>接收时间</template>
                        {{item.createTime}}
                      </el-descriptions-item>
                      <el-descriptions-item v-if="item.finishTime" label-class-name="my-label">
                        <template slot="label"><i class="el-icon-date"></i>处理时间</template>
                        {{item.finishTime}}
                      </el-descriptions-item>
                      <el-descriptions-item v-if="item.duration"  label-class-name="my-label">
                        <template slot="label"><i class="el-icon-time"></i>耗时</template>
                        {{item.duration}}
                      </el-descriptions-item>
                      <el-descriptions-item v-if="item.comment" label-class-name="my-label">
                        <template slot="label"><i class="el-icon-tickets"></i>处理意见</template>
                        {{item.comment.comment}}
                      </el-descriptions-item>
                    </el-descriptions>
                  </el-card>
                </el-timeline-item>
              </el-timeline>
            </div>
          </el-col>

        </el-tab-pane>
        <!--流程图-->
        <el-tab-pane label="流程图" name="3">
        <!-- <bpmn-viewer :flowData="flowData"  :procInsId="taskForm.procInsId"/>  -->

          <ProcessInstanceBpmnViewer
                :loading="processInstanceLoading"
                :model-view="processModelView"
              />

              
        </el-tab-pane>
    </el-tabs>
    </el-card>
  </div>
</template>

<script setup name="Record" >
import { dateFormatter, formatPast2 } from '@/utils/formatTime'
import {getTaskListByProcessInstanceId} from "@/api/flowable/todo";
import {flowRecord} from "@/api/flowable/finished";
import {getProcessVariables, flowXmlAndNode} from "@/api/flowable/definition";
import {getApprovalDetail,getProcessInstanceBpmnModelView} from "@/api/flowable/instance";
// import BpmnViewer from '@/components/Process/viewer';

import ProcessInstanceBpmnViewer from '../../../processInstance/detail/ProcessInstanceBpmnViewer.vue'
// import BpmnViewer from '@/components/Process/viewer/ProcessViewer';
import ProcessInstanceTimeline from '../../../processInstance/detail/ProcessInstanceTimeline';
// import "@riophae/vue-treeselect/dist/vue-treeselect.css";

import Treeselect from 'vue3-treeselect'
// import the styles
import 'vue3-treeselect/dist/vue3-treeselect.css'
// import { ta } from 'element-plus/es/locale';
      // 模型xml数据
    const route = useRoute()
    const { proxy } = getCurrentInstance();
    const { bpm_task_status } = proxy.useDict("bpm_task_status");
    const flowData=ref({});
    const activeName= '1';
    const  activityNodes=ref([]);
    const processModelView = ref({});
    const processInstanceLoading = ref(false)
      // 查询参数
    const queryParams=ref({});
      // 遮罩层
    const loading=ref(true);
    const flowRecordList=ref([]); // 流程流转数据
    const taskList=ref([]);//流程任务的数组
    const taskForm=reactive({
        multiple: false,
        comment:"", // 意见内容
        procInsId: "", // 流程实例编号
        instanceId: "", // 流程实例编号
        deployId: "",  // 流程定义编号
        taskId: "" ,// 流程任务编号
        procDefId: "",  // 流程编号
      });
  
  
 function created() {
 
    taskForm.deployId = route.query && route.query.deployId;
    taskForm.taskId  = route.query && route.query.taskId;
    taskForm.procInsId = route.query && route.query.procInsId;
    // 流程任务重获取变量表单
    //processVariables( taskForm.taskId)
   // getFlowRecordList(taskForm.procInsId, taskForm.deployId);
    ApprovalDetail(taskForm.procInsId, taskForm.deployId)
    TaskListByProcessInstanceId(taskForm.procInsId);
   
  }
  
  function  handleClick(tab, event) {
      if (tab.props.name === '3'){
    
      getProcessInstanceBpmnModelView(taskForm.procInsId).then(res=>{
        processModelView.value = res.data;
        console.log("www",processModelView)
      })
      }
    }
 function   setIcon(val) {
      if (val) {
        return "el-icon-check";
      } else {
        return "el-icon-time";
      }
    }
   function setColor(val) {
      if (val) {
        return "#2bc418";
      } else {
        return "#b3bdbb";
      }
    }

    //流程任务的数组
   function  TaskListByProcessInstanceId(procInsId) {
    
     
      getTaskListByProcessInstanceId(procInsId).then(res => {
        taskList.value = res.data;
      }).catch(res => {
        this.goBack();
      })
    };
    /** 流程流转记录 */
   function getFlowRecordList(procInsId, deployId) {
     
      const params = {procInsId: procInsId, deployId: deployId}
      flowRecord(params).then(res => {
        flowRecordList.value = res.data.flowList;
      }).catch(res => {
        this.goBack();
      })
    }

    function ApprovalDetail(procInsId, deployId) {
     
      const params = {processInstanceId: procInsId, deployId: deployId}
      getApprovalDetail(params).then(res => {
        activityNodes.value=res.data.activityNodes
        console.log("getApprovalDetail",activityNodes.value)
      }).catch(res => {
        this.goBack();
      })
    }
    /** 获取流程变量内容 */
   function processVariables(taskId) {
      if (taskId) {
        // 提交流程申请时填写的表单存入了流程变量中后续任务处理时需要展示
        // getProcessVariables(taskId).then(res => {
        //   this.$nextTick(() => {
        //     // 回显表单
        //     this.$refs.vFormRef.setFormJson(res.data.formJson);
        //     this.$nextTick(() => {
        //       // 加载表单填写的数据
        //       this.$refs.vFormRef.setFormData(res.data);
        //       this.$nextTick(() => {
        //         // 表单禁用
        //         this.$refs.vFormRef.disableForm();
        //       })
        //     })
        //   })
        // });
      }
    }
    /** 返回页面 */
  function  goBack() {
      // 关闭当前标签页并返回上个页面
      const obj = { path: "/task/process", query: { t: Date.now()} };
      proxy.$tab.closeOpenPage(obj);
    }
  
   created()  
</script>
<style lang="scss" scoped>
.test-form {
  margin: 15px auto;
  width: 800px;
  padding: 15px;
}

.clearfix:before,
.clearfix:after {
  display: table;
  content: "";
}
.clearfix:after {
  clear: both
}

.box-card {
  width: 100%;
  margin-bottom: 20px;
}

.el-tag + .el-tag {
  margin-left: 10px;
}

.my-label {
  background: #E1F3D8;
}
</style>
